package org.casper.dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import org.casper.bean.User;
import org.casper.util.DBUtil;

/**
 * 调用存储过程 实现数据库的操作
 * project_name:jdbctest<br>
 * package_name:org.casper.dao<br>
 * file_name:UserDAOByProcedure.java<br>
 * @author Casper<br>
 * create_date:2015年10月10日 上午10:31:54<br>
 * modified_date:
 * description:
 *
 */
public class UserDAOByProcedure {
	
	/**
	 * 查询所有的用户
	 * description:
	 * 2015年10月10日 上午10:55:28
	 * casper
	 * ArrayList<User>
	 * @return
	 */
	public ArrayList<User> selectAllUser(){
		ArrayList<User> allUsers= new ArrayList<User>();
		ResultSet rs = null;
		try {
			Connection conn = DBUtil.getConn();
			/**
			 * 获取执行存储过程的执行器 CallableStatement 
			 * 特别注意的是调用的方式 {call Procedure_name()}
			 */
			CallableStatement callstmt = conn.prepareCall("{call selectAllUser()}");//注意调用的语法
			rs= callstmt.executeQuery();
			User user =null;
			while(rs.next()){
				user = new User(rs.getInt("id"), rs.getString("username"), rs.getString("userpass"));
				allUsers.add(user);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(rs!=null){
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			DBUtil.closeConn();
		}
		return allUsers;
	}
	
	/**
	 * 通过用户id查找用户
	 * description:
	 * 2015年10月10日 下午2:10:17
	 * casper
	 * User
	 * @param id
	 * @return
	 */
	public User selectUserById(int id){
		User user = null;
		ResultSet rs = null;
		try {
			Connection conn = DBUtil.getConn();
			CallableStatement callstmt = conn.prepareCall("{call selectUserById(?)}");
			callstmt.setInt(1, id);				//设置参数
			rs= callstmt.executeQuery();
			while(rs.next()){
				user = new User(rs.getInt("id"), rs.getString("username"),rs.getString("userpass"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(rs!=null){
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			DBUtil.closeConn();
		}
		
		return user;
	}
	
	/**
	 * 增加一个用户
	 * description:
	 * 2015年10月10日 下午2:35:58
	 * casper
	 * int
	 * @param user
	 * @return
	 */
	public int adUser(User user){
		int resultCode = 0;
		try {
			Connection conn = DBUtil.getConn();
			CallableStatement callstmt = conn.prepareCall("{call addUser(?,?)}");
			callstmt.setString(1, user.getUsername());
			callstmt.setString(2, user.getUserpass());
			resultCode = callstmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DBUtil.closeConn();
		}
		return resultCode;
		
	}
	
	/**
	 * 仅仅作为测试使用
	 * description:
	 * 2015年10月10日 上午10:55:48
	 * casper
	 * void
	 * @param args
	 */
	public static void main(String[] args) {
		UserDAOByProcedure byProcedure = new UserDAOByProcedure();
		for(User u:byProcedure.selectAllUser()){
			//System.out.println(u);
		}
		System.out.println(byProcedure.selectUserById(35));
		System.out.println(byProcedure.adUser(new User("zhangqing","zhangqing")));
	}
}
